package org.smile.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
 * 这是一个io工具类
 * @author strive
 *
 */
public class IOUtils {
	/**
     * 把输入流转化一个byte数组
     * @param is
     * @return
     * @throws IOException
     */
    public static byte[] stream2byte(InputStream is) throws IOException{
    	return stream2byte(is,1024*1024);
    }
    /**
     * 把输入流转化一个byte数组
     * @param is
     * @return
     * @throws IOException
     */
    public static byte[] stream2byte(InputStream is,int initSize) throws IOException{
		try{
    		int realSize=0;
    		int len=initSize;
    		byte[] b=new byte[len];
    		byte[] data=new byte[len];
    		int i=0;
    		while((i=is.read(b))>0){
    			if(realSize+i>len){
    				byte[] src=data;
    				len=len>(len*2)?len*3/2:len*2;
    				data=new byte[len];
    				System.arraycopy(src, 0, data, 0, src.length);
    			}
    			System.arraycopy(b, 0, data, realSize, i);
    			realSize+=i;
    		}
    		if(realSize<len){
	    		byte[] result=new byte[realSize];
	    		System.arraycopy(data, 0, result, 0, realSize);
	    		return result;
    		}else{
    			return data;
    		}
		}finally{
			is.close();
		}
    }
    /**
     * 读取一个文件到一个byte数组中
     * @param file 要读取的文件
     * @return
     * @throws IOException 当文件不存在或其它io异常
     */
    public static byte[] file2byte(File file) throws IOException{
    	int size=(int)file.length();
    	byte[] data=new byte[size];
    	FileInputStream is=null;
    	try{
	    	is=new FileInputStream(file);
	    	is.read(data);
    	}finally{
    		if(is!=null){
    			is.close();
    		}
    	}
    	return data;
    }
    /**
     * 写一个byte数组到一个文件中
     * @param file
     * @param bytes
     * @throws IOException
     */
    public static void write(File file,byte[] bytes) throws IOException{
    	FileOutputStream os=new FileOutputStream(file);
    	try{
    		os.write(bytes);
    		os.flush();
    	}finally{
    		os.close();
    	}
    }
}
